{
 "cells": [
  {
   "cell_type": "markdown",
   "id": "bc0f9db1",
   "metadata": {},
   "source": [
    "### 初始化环境"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "id": "f7b165dc",
   "metadata": {},
   "outputs": [],
   "source": [
    "# 在jupyter notebook里env.render看不到窗口\n",
    "# 写一个helper类，用matplotlib刷新显示图像\n",
    "# 初始化传入env，调用helper的render即可\n",
    "from IPython import display # 导入display模块，用于在Jupyter Notebook中显示图像\n",
    "import matplotlib\n",
    "import matplotlib.pyplot as plt # 导入matplotlib库，用于绘制图像\n",
    "%matplotlib inline\n",
    "\n",
    "class GymHelper:\n",
    "    def __init__(self, env, figsize = (3, 3)):\n",
    "        self.env = env # 初始化Gym环境\n",
    "        self.figsize = figsize # 初始化绘图窗口大小\n",
    "        \n",
    "        plt.figure(figsize = figsize) # 创建绘图窗口\n",
    "        plt.title(self.env.spec.id) # 标题设为环境名\n",
    "        self.img = plt.imshow(env.render()) # 在绘图窗口中显示初始图像\n",
    "    \n",
    "    def render(self, title = None):\n",
    "        image_data = self.env.render() # 获取当前环境图像渲染数据\n",
    "        \n",
    "        self.img.set_data(image_data) # 更新绘图窗口中的图像数据\n",
    "        display.display(plt.gcf()) # 刷新显示\n",
    "        display.clear_output(wait = True) # 有新图片时再清除绘图窗口原有图像\n",
    "        if title: # 如果有标题，就显示标题\n",
    "            plt.title(title)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "id": "c3a3b7d1",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 216x216 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "import gym\n",
    "import time\n",
    "import numpy as np\n",
    "from gym.envs.toy_text.frozen_lake import generate_random_map\n",
    "\n",
    "# 设置随机数种子\n",
    "np.random.seed(233)\n",
    "\n",
    "# 创建FrozenLake环境\n",
    "env = gym.make('FrozenLake-v1', desc=generate_random_map(size=4), is_slippery=False, render_mode=\"rgb_array\")\n",
    "\n",
    "# 重置环境状态\n",
    "env.reset()\n",
    "\n",
    "# 创建GymHelper对象来辅助显示\n",
    "gym_helper = GymHelper(env)"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "612169ca",
   "metadata": {},
   "source": [
    "简介链接 https://www.gymlibrary.dev/environments/toy_text/frozen_lake/"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "aa16de24",
   "metadata": {},
   "source": [
    "### 策略迭代"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "id": "5ea055a4",
   "metadata": {},
   "outputs": [],
   "source": [
    "# 策略评估方法，通过迭代计算来估算给定策略条件下的状态值函数\n",
    "def policy_evaluation(V, policy, gamma, theta):\n",
    "    while True:\n",
    "        # 初始化一个delta值，用来衡量在每轮循环后值函数的改变程度\n",
    "        delta = 0\n",
    "        # 遍历环境中的每个状态s\n",
    "        for s in range(env.observation_space.n):\n",
    "            # 初始化一个变量v，存储计算出的状态值\n",
    "            v = 0\n",
    "            # 遍历当前状态下所有可能的动作及其相应的概率\n",
    "            for action, action_prob in enumerate(policy[s]):\n",
    "                # 对于每个动作，查看环境所有可能的结果，包括概率、下一个状态、奖励以及是否结束\n",
    "                for prob, next_state, reward, done in env.P[s][action]:\n",
    "                    if done: # 如果这个动作将导致游戏结束，也就没有下一个状态了，则只关心当前的奖励\n",
    "                        v += action_prob * prob * reward\n",
    "                    else: # 否则，要考虑当前的奖励和下一个状态的折扣预期值\n",
    "                        v += (action_prob * prob * (reward + gamma * V[next_state]))\n",
    "            # 更新delta\n",
    "            delta = max(delta, np.abs(v - V[s]))\n",
    "            # 更新状态s的值函数\n",
    "            V[s] = v\n",
    "        # 如果所有状态s的值函数变化都小于设定的阈值，则退出循环\n",
    "        if delta < theta:\n",
    "            break"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "id": "6f8d3ae6",
   "metadata": {
    "scrolled": true
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "(16,\n",
       " {0: [(1.0, 4, 0.0, False)],\n",
       "  1: [(1.0, 9, 0.0, True)],\n",
       "  2: [(1.0, 6, 0.0, False)],\n",
       "  3: [(1.0, 1, 0.0, True)]})"
      ]
     },
     "execution_count": 4,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "len(env.P), env.P[5]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "id": "7cdbdf28",
   "metadata": {},
   "outputs": [],
   "source": [
    "# 策略改进方法，尽可能找到最优策略\n",
    "def policy_improvent(V, policy, gamma):\n",
    "    # 初始化标识位，表示是否已找到最优策略\n",
    "    optimal = True\n",
    "    # 遍历环境中的每个状态\n",
    "    for s in range(env.observation_space.n):\n",
    "        # 保存当前策略以便稍后进行比较\n",
    "        old_policy = policy[s].copy()\n",
    "        # 初始化一个数组q_s，用于保存给定状态下所有动作的期望回报\n",
    "        q_s = np.zeros(env.action_space.n)\n",
    "        # 对于每个可能的动作，分别计算其期望回报\n",
    "        for action in range(env.action_space.n):\n",
    "            # 对于每个动作，查看环境所有可能的结果，包括概率、下一个状态、奖励以及是否结束\n",
    "            for prob, next_state, reward, done in env.P[s][action]:\n",
    "                if done: # 如果这个动作将导致游戏结束，也就没有下一个状态了，则只关心当前的奖励\n",
    "                    q_s[action] += prob * reward\n",
    "                else: # 否则，还是要考虑当前的奖励和下一个状态的折扣预期值\n",
    "                    q_s[action] += (prob * (reward + gamma * V[next_state]))\n",
    "        # 根据每个动作的期望回报选择最佳动作\n",
    "        best_action = np.argmax(q_s)\n",
    "        # 更新策略\n",
    "        policy[s] = np.eye(env.action_space.n)[best_action]\n",
    "        # 如果新策略与原策略不同，则将标识位设为False\n",
    "        if np.any(old_policy != policy[s]):\n",
    "            optimal = False\n",
    "    # 返回是否找到最优策略\n",
    "    return optimal"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "id": "f14b2b83",
   "metadata": {},
   "outputs": [],
   "source": [
    "# 策略迭代算法，不断进行策略评估和策略改进\n",
    "def policy_iteration(gamma = 0.99, max_iteration = 10000, theta = 0.0001):\n",
    "    # 初始化状态值函数为0，形状为当前环境中状态数量\n",
    "    V = np.zeros(env.observation_space.n)\n",
    "    # 初始化策略为随机策略，即每个状态下每个动作的选择概率相等\n",
    "    policy = np.ones([env.observation_space.n, env.action_space.n]) / env.action_space.n\n",
    "    # 循环最大迭代次数\n",
    "    for i in range(max_iteration):\n",
    "        # 评估当前策略，更新状态值函数\n",
    "        policy_evaluation(V, policy, gamma, theta)\n",
    "        # 对当前策略进行改进，获取是否找到了最优策略\n",
    "        optimal = policy_improvent(V, policy, gamma)\n",
    "        # 如果找到了最优策略，则跳出循环\n",
    "        if optimal:\n",
    "            break\n",
    "    # 返回状态值函数和策略\n",
    "    return V, policy"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "id": "f3a56e13",
   "metadata": {},
   "outputs": [],
   "source": [
    "V, policy = policy_iteration(gamma = 0.99, max_iteration = 10, theta = 0.0001)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "id": "1aa795ba",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([[0.95099005, 0.        , 0.970299  , 0.        ],\n",
       "       [0.96059601, 0.970299  , 0.9801    , 0.99      ],\n",
       "       [0.95099005, 0.        , 0.99      , 1.        ],\n",
       "       [0.        , 0.        , 1.        , 0.        ]])"
      ]
     },
     "execution_count": 8,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "V.reshape(4, 4)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "id": "a854eb36",
   "metadata": {
    "scrolled": false
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([[0., 1., 0., 0.],\n",
       "       [1., 0., 0., 0.],\n",
       "       [0., 1., 0., 0.],\n",
       "       [1., 0., 0., 0.],\n",
       "       [0., 0., 1., 0.],\n",
       "       [0., 0., 1., 0.],\n",
       "       [0., 1., 0., 0.],\n",
       "       [0., 1., 0., 0.],\n",
       "       [0., 0., 0., 1.],\n",
       "       [1., 0., 0., 0.],\n",
       "       [0., 1., 0., 0.],\n",
       "       [0., 1., 0., 0.],\n",
       "       [1., 0., 0., 0.],\n",
       "       [1., 0., 0., 0.],\n",
       "       [0., 0., 1., 0.],\n",
       "       [1., 0., 0., 0.]])"
      ]
     },
     "execution_count": 9,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "policy"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "id": "8cd2015f",
   "metadata": {
    "scrolled": true
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([['下', '左', '下', '左'],\n",
       "       ['右', '右', '下', '下'],\n",
       "       ['上', '左', '下', '下'],\n",
       "       ['左', '左', '右', '左']], dtype='<U1')"
      ]
     },
     "execution_count": 10,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "np.array([\"左\", \"下\", \"右\", \"上\"])[np.argmax(policy.reshape(4, 4, 4), axis = 2)]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "id": "3b079d4f",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 216x216 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "# 重置环境，开始新的一轮游戏\n",
    "observation, _ = env.reset()\n",
    "# 创建GymHelper对象来辅助显示\n",
    "gym_helper = GymHelper(env)\n",
    "\n",
    "# 进行10步的游戏\n",
    "for i in range(10):\n",
    "    # 渲染环境，title为当前步骤数\n",
    "    gym_helper.render(title = str(i))\n",
    "    \n",
    "    # 通过已经求得的最优策略，找到当前状态下的最优动作\n",
    "    action = np.argmax(policy[observation])\n",
    "    # 执行action，获取新的信息\n",
    "    observation, reward, terminated, truncated, info = env.step(action)\n",
    "        \n",
    "    time.sleep(0.5)\n",
    "    \n",
    "    # 如果游戏结束，则结束当前循环\n",
    "    if terminated or truncated:\n",
    "        break\n",
    "\n",
    "# 游戏结束\n",
    "gym_helper.render(title = \"Finished\")\n",
    "# 关闭环境\n",
    "env.close()"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "a80378f6",
   "metadata": {},
   "source": [
    "### 价值迭代"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 12,
   "id": "05e95a56",
   "metadata": {},
   "outputs": [],
   "source": [
    "# 价值迭代\n",
    "def value_iteration(gamma, max_iteration, theta):\n",
    "    # 初始化状态值函数为0，形状为环境中状态数量\n",
    "    V = np.zeros(env.observation_space.n)\n",
    "    # 循环最大迭代次数\n",
    "    for i in range(max_iteration):\n",
    "        # 初始化一个delta值，用于保存状态值函数在这次迭代中的最大改变量\n",
    "        delta = 0\n",
    "        # 遍历每一个状态\n",
    "        for s in range(env.observation_space.n):\n",
    "            # 对每个状态初始化一个动作值函数\n",
    "            q_s = np.zeros(env.action_space.n)\n",
    "            # 对每种可能的动作进行循环\n",
    "            for action in range(env.action_space.n):\n",
    "                # 获取在给定的状态和动作下，环境的变化情况\n",
    "                for prob, next_state, reward, done in env.P[s][action]:\n",
    "                    if done: # 如果这个动作将导致游戏结束，也就没有下一个状态了，则只关心当前的奖励\n",
    "                        q_s[action] += prob * reward\n",
    "                    else: # 否则，还是要考虑当前的奖励和下一个状态的折扣预期值\n",
    "                        q_s[action] += (prob * (reward + gamma * V[next_state]))\n",
    "            # 计算当前状态的最优动作值函数\n",
    "            best_value = max(q_s)\n",
    "            # 更新delta\n",
    "            delta = max(delta, np.abs(best_value - V[s]))\n",
    "            # 更新状态值函数\n",
    "            V[s] = best_value\n",
    "        # 如果所有状态值函数的改变量都小于阈值theta，则提前终止循环\n",
    "        if delta < theta:\n",
    "            break\n",
    "    # 依据最终的状态值函数获取策略\n",
    "    policy = get_policy(V, gamma)\n",
    "    # 返回状态值函数和策略\n",
    "    return V, policy\n",
    "\n",
    "# 获取最优策略\n",
    "def get_policy(V, gamma):\n",
    "    # 初始化策略，形状为环境中状态数量和动作数量\n",
    "    policy = np.zeros((env.observation_space.n, env.action_space.n))\n",
    "    # 遍历每一个状态\n",
    "    for s in range(env.observation_space.n):\n",
    "        # 对每个状态初始化一个动作值函数\n",
    "        q_s = np.zeros(env.action_space.n)\n",
    "        # 对每种可能的动作进行循环\n",
    "        for a in range(env.action_space.n):\n",
    "            # 获取在给定的状态和动作下，环境的变化情况\n",
    "            for prob, next_state, reward, done in env.P[s][a]:\n",
    "                if done: # 如果这个动作将导致游戏结束，也就没有下一个状态了，则只关心当前的奖励\n",
    "                    q_s[a] += prob * reward\n",
    "                else: # 否则，还是要考虑当前的奖励和下一个状态的折扣预期值\n",
    "                    q_s[a] += (prob * (reward + gamma * V[next_state]))\n",
    "        # 选择期望回报最高的动作作为最佳动作\n",
    "        best_action = np.argmax(q_s)\n",
    "        # 更新策略，使其在当前状态下选择最佳动作\n",
    "        policy[s] = np.eye(env.action_space.n)[best_action]\n",
    "    # 返回策略\n",
    "    return policy"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 13,
   "id": "a1f9f026",
   "metadata": {},
   "outputs": [],
   "source": [
    "V, policy = value_iteration(gamma = 0.99, max_iteration = 10, theta = 0.0001)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 14,
   "id": "d319b4de",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([[0.95099005, 0.        , 0.970299  , 0.        ],\n",
       "       [0.96059601, 0.970299  , 0.9801    , 0.99      ],\n",
       "       [0.95099005, 0.        , 0.99      , 1.        ],\n",
       "       [0.        , 0.        , 1.        , 0.        ]])"
      ]
     },
     "execution_count": 14,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "V.reshape(4, 4)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 15,
   "id": "0f476abf",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([[0., 1., 0., 0.],\n",
       "       [1., 0., 0., 0.],\n",
       "       [0., 1., 0., 0.],\n",
       "       [1., 0., 0., 0.],\n",
       "       [0., 0., 1., 0.],\n",
       "       [0., 0., 1., 0.],\n",
       "       [0., 1., 0., 0.],\n",
       "       [0., 1., 0., 0.],\n",
       "       [0., 0., 0., 1.],\n",
       "       [1., 0., 0., 0.],\n",
       "       [0., 1., 0., 0.],\n",
       "       [0., 1., 0., 0.],\n",
       "       [1., 0., 0., 0.],\n",
       "       [1., 0., 0., 0.],\n",
       "       [0., 0., 1., 0.],\n",
       "       [1., 0., 0., 0.]])"
      ]
     },
     "execution_count": 15,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "policy"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 16,
   "id": "b30362c3",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([['下', '左', '下', '左'],\n",
       "       ['右', '右', '下', '下'],\n",
       "       ['上', '左', '下', '下'],\n",
       "       ['左', '左', '右', '左']], dtype='<U1')"
      ]
     },
     "execution_count": 16,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "np.array([\"左\", \"下\", \"右\", \"上\"])[np.argmax(policy.reshape(4, 4, 4), axis = 2)]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 17,
   "id": "0df7458b",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 216x216 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "# 重置环境，开始新的一轮游戏\n",
    "observation, _ = env.reset()\n",
    "# 创建GymHelper对象来辅助显示\n",
    "gym_helper = GymHelper(env)\n",
    "\n",
    "# 进行10步的游戏\n",
    "for i in range(10):\n",
    "    # 渲染环境，title为当前步骤数\n",
    "    gym_helper.render(title = str(i))\n",
    "    \n",
    "    # 通过已经求得的最优策略，找到当前状态下的最优动作\n",
    "    action = np.argmax(policy[observation])\n",
    "    # 执行action，获取新的信息\n",
    "    observation, reward, terminated, truncated, info = env.step(action)\n",
    "        \n",
    "    time.sleep(0.5)\n",
    "    \n",
    "    # 如果游戏结束，则结束当前循环\n",
    "    if terminated or truncated:\n",
    "        break\n",
    "\n",
    "# 游戏结束\n",
    "gym_helper.render(title = \"Finished\")\n",
    "# 关闭环境\n",
    "env.close()"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "bdcd3301",
   "metadata": {},
   "source": [
    "### 两种方法比较"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 18,
   "id": "457928c6",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "(array([0.95099005, 0.        , 0.970299  , 0.        , 0.96059601,\n",
      "       0.970299  , 0.9801    , 0.99      , 0.95099005, 0.        ,\n",
      "       0.99      , 1.        , 0.        , 0.        , 1.        ,\n",
      "       0.        ]), array([[0., 1., 0., 0.],\n",
      "       [1., 0., 0., 0.],\n",
      "       [0., 1., 0., 0.],\n",
      "       [1., 0., 0., 0.],\n",
      "       [0., 0., 1., 0.],\n",
      "       [0., 0., 1., 0.],\n",
      "       [0., 1., 0., 0.],\n",
      "       [0., 1., 0., 0.],\n",
      "       [0., 0., 0., 1.],\n",
      "       [1., 0., 0., 0.],\n",
      "       [0., 1., 0., 0.],\n",
      "       [0., 1., 0., 0.],\n",
      "       [1., 0., 0., 0.],\n",
      "       [1., 0., 0., 0.],\n",
      "       [0., 0., 1., 0.],\n",
      "       [1., 0., 0., 0.]]))\n",
      "(array([0.95099005, 0.        , 0.970299  , 0.        , 0.96059601,\n",
      "       0.970299  , 0.9801    , 0.99      , 0.95099005, 0.        ,\n",
      "       0.99      , 1.        , 0.        , 0.        , 1.        ,\n",
      "       0.        ]), array([[0., 1., 0., 0.],\n",
      "       [1., 0., 0., 0.],\n",
      "       [0., 1., 0., 0.],\n",
      "       [1., 0., 0., 0.],\n",
      "       [0., 0., 1., 0.],\n",
      "       [0., 0., 1., 0.],\n",
      "       [0., 1., 0., 0.],\n",
      "       [0., 1., 0., 0.],\n",
      "       [0., 0., 0., 1.],\n",
      "       [1., 0., 0., 0.],\n",
      "       [0., 1., 0., 0.],\n",
      "       [0., 1., 0., 0.],\n",
      "       [1., 0., 0., 0.],\n",
      "       [1., 0., 0., 0.],\n",
      "       [0., 0., 1., 0.],\n",
      "       [1., 0., 0., 0.]]))\n"
     ]
    }
   ],
   "source": [
    "print(policy_iteration(gamma = 0.99, max_iteration = 10, theta = 0.0001))\n",
    "print(value_iteration(gamma = 0.99, max_iteration = 10, theta = 0.0001))"
   ]
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3 (ipykernel)",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.8.10"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 5
}
